package mybaidu

import "public/tools"

//百度返回的
type BaiduToken struct {
	Access_token string `json:"access_token"`
	Expires_in   int    `json:"expires_in"` //Access Token的有效期(秒为单位，一般为1个月)；
}

//人脸检测参数
//参考http://ai.baidu.com/docs#/Face-Detect-V3/top
type ReqFaceDetect struct {
	Image        string `json:"image"`
	Image_type   string `json:"image_type"`
	Face_field   string `json:"face_field"`
	Max_face_num int    `json:"max_face_num"`
	Face_type    string `json:"face_type"`
}

//通用返回
type BaseRet struct {
	Error_code int    `json:"error_code"`
	Error_msg  string `json:"error_msg"`
	Log_id     int    `json:"log_id"`
	Timestamp  int    `json:"timestamp"`
	Cached     int    `json:"cached"`
}

//人脸检测返回
type FaceDetectRet struct {
	BaseRet
	Result FaceDetectResult `json:"result"`
}

type FaceDetectResult struct {
	Face_num  int         `json:"face_num"`
	Face_list []Face_list `json:"face_list"`
}

//
type Face_list struct {
	Face_token       string       `json:"face_token"` //人脸图片的唯一标识
	Location         Location     `json:"location"`
	Face_probability float32      `json:"face_probability"`
	Angle            Angle        `json:"angle"`
	Age              float32      `json:"age"`
	Beauty           int          `json:"beauty"`
	Expression       []Expression `json:"expression"`
	Face_shape       []Face_shape `json:"face_shape"`
	Gender           []Expression `json:"gender"`
	Glasses          []Expression `json:"glasses"`
	Race             []Expression `json:"race"`
	Face_type        []Expression `json:"face_type"`
	Landmark         []Landmark   `json:"landmark"`
	Landmark72       []Landmark   `json:"landmark72"`
	Quality          []Quality    `json:"quality"`
}

//
type Location struct {
	Left     float32 `json:"left"`
	Top      float32 `json:"top"`
	Width    float32 `json:"width"`
	Height   float32 `json:"height"`
	Rotation int     `json:"rotation"`
}

//
type Angle struct {
	Yaw   float32 `json:"yaw"`
	Pitch float32 `json:"pitch"`
	Roll  float32 `json:"roll"`
}

//
type Expression struct {
	Type        string  `json:"type"`
	Probability float32 `json:"probability"`
}

//
type Face_shape struct {
	Type        float32 `json:"type"`
	Probability float32 `json:"probability"`
}

//
type Landmark struct {
	X float32 `json:"x"`
	Y float32 `json:"y"`
}

//
type Occlusion struct {
	Left_eye    float32 `json:"left_eye"`
	Right_eye   float32 `json:"right_eye"`
	Nose        float32 `json:"nose"`
	Mouth       float32 `json:"mouth"`
	Left_cheek  float32 `json:"left_cheek"`
	Right_cheek float32 `json:"right_cheek"`
	Chin        float32 `json:"chin"`
}

//
type Quality struct {
	Occlusion    []Occlusion `json:"occlusion"`
	Blur         float32     `json:"blur"`
	Illumination float32     `json:"illumination"`
	Completeness int         `json:"completeness"`
}

//人脸添加参数
//参考http://ai.baidu.com/docs#/Face-Set-V3/top
/*
	每个开发者账号可以创建100个appid；
	每个appid对应一个人脸库，且不同appid之间，人脸库互不相通；
	每个人脸库下，可以创建多个用户组，用户组（group）数量没有限制；
	每个用户组（group）下，可添加无限个user_id，无限张人脸（注：为了保证查询速度，单个group中的人脸容量上限建议为80万）；
	每个用户（user_id）所能注册的最大人脸数量没有限制；
*/
type ReqFaceAdd struct {
	Image            string `json:"image"`
	Image_type       string `json:"image_type"`
	Group_id         string `json:"group_id"`
	User_id          string `json:"user_id"`
	User_info        string `json:"user_info"`
	Quality_control  string `json:"quality_control"`
	Liveness_control string `json:"liveness_control"` //默认NONE
}

//人脸添加返回
type FaceAddRet struct {
	BaseRet
	Result FaceAddResult `json:"result"`
}

//
type FaceAddResult struct {
	Face_token string   `json:"face_token"` //人脸图片的唯一标识
	Location   Location `json:"location"`   //人脸在图片中的位置
}

//人脸搜索参数
//参考http://ai.baidu.com/docs#/Face-Search-V3/top
type ReqFaceSearch struct {
	Image         string `json:"image"`
	Image_type    string `json:"image_type"`
	Group_id_list string `json:"group_id_list"`
	// User_id          string `json:"user_id"`
	Max_user_num     int    `json:"max_user_num"`
	Quality_control  string `json:"quality_control"`
	Liveness_control string `json:"liveness_control"` //默认NONE
}

type ReqFaceSearch2 struct {
	Image            string `json:"image"`
	Image_type       string `json:"image_type"`
	Group_id_list    string `json:"group_id_list"`
	User_id          string `json:"user_id"`
	Max_user_num     int    `json:"max_user_num"`
	Quality_control  string `json:"quality_control"`
	Liveness_control string `json:"liveness_control"` //默认NONE
}

//人脸搜索返回
type FaceSearchRet struct {
	BaseRet
	Result FaceSearchResult `json:"result"`
}

//
type FaceSearchResult struct {
	Face_token string      `json:"face_token"` //人脸图片的唯一标识
	User_list  []User_list `json:"user_list"`  //
}

//
type User_list struct {
	Group_id  string  `json:"group_id"`  //
	User_id   string  `json:"user_id"`   //
	User_info string  `json:"user_info"` //
	Score     float32 `json:"score"`     //
}

//获取用户人脸列表参数
//参考http://ai.baidu.com/docs#/Face-Set-V3/871dcfcb
type ReqFaceGetList struct {
	Group_id string `json:"group_id"` //
	User_id  string `json:"user_id"`  //
}

//获取用户人脸列表返回
type FaceGetListRet struct {
	BaseRet
	Result FaceGetListResult `json:"result"`
}

//
type FaceGetListResult struct {
	Face_list []Face_list_ `json:"face_list"` //
}

//
type Face_list_ struct {
	Face_token string     `json:"face_token"`
	Ctime      tools.Time `json:"ctime"`
}

//获取用户列表
//参考http://ai.baidu.com/docs#/Face-Set-V3/67d10e05
type ReqGroupGetUsers struct {
	Group_id string `json:"group_id"`
	Start    int    `json:"start"`
	Length   int    `json:"length"`
}

//获取用户列表返回
type GroupGetUsersRet struct {
	BaseRet
	Result GroupGetUsersResult `json:"result"`
}

//
type GroupGetUsersResult struct {
	User_id_list []string `json:"user_id_list"`
}

//获取组列表返回
type GroupGetListRet struct {
	BaseRet
	Result GroupGetListResult `json:"result"`
}

//
type GroupGetListResult struct {
	Group_id_list []string `json:"group_id_list"`
}

//人脸比对参数
//参考http://ai.baidu.com/docs#/Face-Match-V3/top
type ReqFaceMatch struct {
	Image            string `json:"image"`
	Image_type       string `json:"image_type"`
	Face_type        string `json:"face_type"`
	Quality_control  string `json:"quality_control"`
	Liveness_control string `json:"liveness_control"` //默认NONE
}

//人脸比对参数返回
type FaceMatchRet struct {
	BaseRet
	Result FaceMatchResult `json:"result"`
}

//
type FaceMatchResult struct {
	Score     float32      `json:"score"`     //人脸相似度得分，推荐阈值80分
	Face_list []Face_list_ `json:"face_list"` //返回的顺序与传入的顺序保持一致
}

//身份证信息
type BaiduResInfo struct {
	/*
		normal-识别正常
		reversed_side-身份证正反面颠倒
		non_idcard-上传的图片中不包含身份证
		blurred-身份证模糊
		other_type_card-其他类型证照
		over_exposure-身份证关键字段反光或过曝
		unknown-未知状态
	*/
	Image_status     string          `json:"image_status"`
	Words_result     BaiduWordResult `json:"words_result"`
	Words_result_num int             `json:"words_result_num"`
}

//身份证信息
type BaiduWordResult struct {
	Addr   BaiduLocation `json:"住址"`
	IDCard BaiduLocation `json:"公民身份号码"`
	Birth  BaiduLocation `json:"出生"`
	Name   BaiduLocation `json:"姓名"`
	Sex    BaiduLocation `json:"性别"`
	Nation BaiduLocation `json:"民族"`
}

//
type BaiduLocation struct {
	Location BadiuXYZ `json:"location"`
	Words    string   `json:"words"`
}

//
type BadiuXYZ struct {
	Left   int `json:"left"`
	Top    int `json:"top"`
	Width  int `json:"width"`
	Height int `json:"height"`
}
